iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

說到變數及常數,就得提一下宣告/賦值

宣告( Declarations ) : 有點像產生一個容器的感覺,但不一定要給值

let a ;  //命名一個變數為 a 

賦值 (assign),把右邊的值給左邊的變數

let  b = 1 ;

JavaScript 有三種宣告方式,分別是var 、let、const

變數,可以想成就是一個命名的容器,用來保存值,並在程式碼中操作使用,可重複賦值,var可以重複宣告

常數,不能重複指定值,也不能重複宣告

因 var 的作用域可以是全域也可以是函式作為範圍,為了避免環境汙染,自ES6開始引入 const 、 let,const 、 let 作用域是區塊作用域。

作用域就是變數執行的範圍,我自己是想成活動範圍,如果在範圍外呼叫該變數,則無法使用/操作該變數

作用域主要分成兩種類型:Lexical Scope ( 語彙範疇 )、Dynamic Scope ( 動態範疇 ),JavaScript是屬於Lexical Scope ( 語彙範疇 ),被包裹在內層的區塊可以保護自己的變數不被外層取用,相反的,外層區塊的變數還是可以被內層區塊使用 ; 當我們執行一段程式時,JavaScript 引擎會先把整段程式碼看過一次,決定哪些函數可以使用哪些變數,然後才執行函數呼叫,所以JavaScript 的變數作用域是在函數還沒執行前就決定好了。

JavaScript 有三種作用域 : 全局作用域、函式作用域、區塊作用域,區塊作用域就是在兩個大括號中{ } (curly braces)裡面。

說到var 、let、 const,順便說一下提升( hoisting ),var 、let、 const三個都會提升,函式(function)宣告也會提升,這樣的好處可以在函式宣告前就交呼叫它,也可以函式間互相呼叫,而var 、let、 const分別將變數宣告提升到函式及區塊作用域,var初始化為undefined,但let 和const卻有個Temporal Dead Zone(TDZ),如果在提升( hoisting )之後、宣告之前存取的話,會發生錯誤,而為什麼要有這個TDZ呢,第一是使避免和捕獲錯誤更加容易 ,第二是讓const實際上按照它們應該的方式工作。


上一篇
第三天 - - JavaScript 運算式與運算子( Expressions and operators)
下一篇
第五天 - - JavaScript 陣列
系列文
跟著鱷魚妹妹一起坐牢之JavaScript 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言